using Microsoft.Xna.Framework.Graphics;
using Ruminate.GUI.Framework;
using Ruminate.Utils;
using Color = Microsoft.Xna.Framework.Color;
using Rectangle = Microsoft.Xna.Framework.Rectangle;

namespace Ruminate.GUI.Content {

    public class Panel : Element {

        /*####################################################################*/
        /*                               Variables                            */
        /*####################################################################*/

        private BorderRenderer _renderer;
        private Texture2D _panel;

        /*####################################################################*/
        /*                        Node Initialization                         */
        /*####################################################################*/

        public Panel(int x, int y, int width, int height) 
            : base(new Offset(x, y, width, height)) { }

        public Panel(int buffer) : base(new Fill(buffer)) { }

        /*####################################################################*/
        /*                       Widget Initialization                        */
        /*####################################################################*/

        protected internal override void Init() {

            _renderer = (BorderRenderer)InstanceData.DefaultRenderers["Panel"];
        }

        protected internal override void Render() {

            var size = LocationComponent.Size.ToPoint();
            _panel = _renderer.Render(size);            
        }

        internal protected override Rectangle ChildRenderArea() {

            return _renderer.BuildSafeArea(LocationComponent.Size.ToPoint());
        }

        /*####################################################################*/
        /*                              Game Loop                             */
        /*####################################################################*/                

        protected internal override void Update() { }

        internal protected override void Draw() {

            SpriteBatch.Draw(_panel, LocationComponent.RenderBounds, Color.White);
        }        
    }
}